package service.array;
import domain.dto.*;
import domain.entity.*;
import domain.vo.*;
import service.*;

public class DeptService extends BaseService<Dept, DeptDto, DeptVo>
        implements IDeptService{
    /**
     * 单例模式
     */
    private static IDeptService singleton;
    public static IDeptService getInstance() {
        if(singleton == null) {
            singleton = new DeptService();
        }
        return singleton;
    }
    private  IUserService userService ;
    private DeptService() {
        data = new Dept[DATA_SIZE + 1];
        temp = new DeptVo[DATA_SIZE];
    }

    /**
     * 根据部⻔传输对象（DeptDto）和部⻔ID创建⼀个新的部⻔实体对象（Dept）。
     *
     * @param dto 传⼊的部⻔传输对象，包含部⻔的基本信息（如名称和电话）。
     * @param id 为新创建的部⻔实体指定的唯⼀ID。
     * @return 返回创建的部⻔实体对象（Dept）。
     */
    @Override
     Dept createEntity(DeptDto dto, int id) {
        // 使⽤传⼊的部⻔传输对象（DeptDto）中的信息创建—个新的部⻔实体对象（Dept），并返回
        return new Dept(id, dto.name, dto.phone);
    }
    @Override
     void updateEntity(DeptDto dto, Dept dept) {
        // 使⽤传⼊的部⻔传输对象（DeptDto）中的新名称更新部⻔实体对象的名称
        dept.name = dto.name;
        // 使⽤传⼊的部⻔传输对象（DeptDto）中的新电话更新部⻔实体对象的电话
        dept.phone = dto.phone;
    }

    @Override
    DeptVo convertToVo(Dept dept) {
        return new DeptVo(dept.getId(), dept.name, dept.phone);
    }

    @Override
    public  Result delete(int id) {
        // 检查提供的部⻔ ID 是否有效：ID ⼩于 1，ID 超出有效范围，或者该 ID 对应的数据为空
        if (!existsById(id)) {
            return Result.failure("删除失败，不存在该数据");
        }
        if (id < 1 || id >= idCounter || data[id] == null) {
            // 如果 ID ⽆效，返回删除失败的结果
            return Result.failure("删除失败，不存在该数据");
        }
        if (userService == null) { // 懒加载
            userService =  UserService.getInstance();
        }
        if (userService.deptInUse(id)) {
            return Result.failure("删除失败，有⽤户属于该部⻔，不能删除");
        }
        // 将指定 ID 的部⻔数据置为 null，表示删除该数据
        data[id] = null;
        // 返回删除成功的结果
        return Result.success("删除成功", null);
    }


}